10 REM *********+* 20 REM * BASSIST * 40 REM *********** 50 : 60 REM 70 : 80 POKE53280,0:POKE53281,0:PRINTCHR$(14)CHR$(8)"[147]" 90 IFZ=0THENZ=1:X$="":Z$="":LOAD" BASSIST2",8,1 100 : 101 REM DEFINITIONEN & INIT. 102 : 200 HM=100:DIMH$(HM),HD%(HM),HA%(HM),HS%(HM),HG%(HM),F(11),P(4,2) 205 DIMS$(12,1),SP(6),SM(11),X$(16) 210 REM FUNC.F.BIT-MUSTER (Y=BIT-MUSTER,Z=GRUNDTON,N=NR.1/2-TON UEBER GRUNDTON): 212 DEFFN BS(N)=YORSM(N+Z+(N+Z>11)*12):REM FUNCT. SET BIT 214 DEFFN BC(N)=YAND4095-SM(N+Z+(N+Z>11)*12):REM FUNCT. CLEAR BIT 216 DEFFN BT(N)=YANDSM(N+Z+(N+Z>11)*12):REM FUNCT. TEST BIT 220 F=110:FORI=0TO11:F(I)=F:F=F*1.059463094:SM(I)=2^I:NEXT:REM FREQU.+BIT-MASK. 230 FORI=0TO6:READSP(I):NEXT:REM SKALA-POINTERS (A...G) 240 FORJ=0TO1:FORI=0TO12:READS$(I,J):NEXTI,J:REM #- & B-SKALEN 250 FORI=0TO4:FORJ=0TO2:READP(I,J):NEXTJ,I:REM PARAMETER 260 C$=CHR$(13):R=54272:REM ADR.SID-REG. 265 MN$=" < MIT 'F1' ZURUECK INS [205]ENUE >" 266 M0$=" [164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]" 267 M1$=" [163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]" 268 M2$=" [167] " 269 M3$=" [167] [165]" 270 PS$=" -[219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219]+" 275 L$=" " 280 FA=.943874:FK=6.378901:F6=1.019440644:FO=1.37:F1=150:F2=300:REM FREQU.KONST 290 AP=49152:FS=AP+22:RB=251:RP=252:REM ADR.F.ASS-PROG 300 : 301 REM MENUE 302 : 310 GOSUB6950:Z=32:PRINT"[147][159]"M0$:PRINTM3$ 320 PRINTM2$TAB(13)"[194] [193] [211] [211] [201] [211] [212]"TAB(Z)"[165]":PRINTM3$:PRINTM1$:PRINTM0$:PRINTM3$ 321 PRINTM2$"1=[206]EUEINGABE/[197]DITIEREN"TAB(Z)"[165]":PRINTM3$ 322 PRINTM2$"2=[193]BSPEICHERN AUF [196]ISK"TAB(Z)"[165]":PRINTM3$ 323 PRINTM2$"3=[197]INLESEN VON [196]ISK"TAB(Z)"[165]":PRINTM3$ 324 PRINTM2$"4=[208]LAY [194]ASS [211]OLO"TAB(Z)"[165]":PRINTM3$ 325 PRINTM2$"5=[208]LAY [194]ASS+[211]CHLAGZEUG"TAB(Z)"[165]":PRINTM3$ 326 PRINTM2$"6=[208]ARAMETER-[197]INSTELLUNG"TAB(Z)"[165]":PRINTM3$ 327 PRINTM2$"7=[197]NDE"TAB(Z)"[165]":PRINTM3$:PRINTM1$ 330 GETZ$:IFZ$<"1"ORZ$>"7"THEN330 340 Z=VAL(Z$):ONZGOSUB8000,2000,3000,500,505,5000,900 350 POKE198,0:GOTO300 390 END 500 : 501 REM PLAY 502 : 504 KP=1:GOTO510 505 KP=0 510 PRINT"[147] "MT$:PRINT""MN$"" 520 TR%=1:AZ=1:FL=0:H=0:H$(HT+1)=H$(1):PR$="" 525 AU=HD%(HT)-A4+1:IFAU<1THENAU=1 530 GOSUB6900:GOSUB1800 540 FORW=1TOWA:HB=-1:HN=1:H4=0 550 HL=H:H=HN:HN=H+1:IFH>HTTHEN850 555 IFHHL+1THENPR$="[197]NDE [215]IEDERHOLUNG" 570 IFHN=HB+1THENHN=HW:HB=-1 580 IFH$(HN)="W"THENHB=HD%(HN):HW=HN+1:HN=HG%(HN) 590 FORHD=1TOHD%(H):H4=H4+1:IFH4>A4THENH4=1 600 : 601 REM TON BESTIMMEN 602 : 605 IFH$(H)="[208]AUSE"THEN630 610 IFWHG%(HL)THENTA%=HG%(H):GOTO680:REM NEUE HARMONIE BEGINNT 660 IFHD<>HD%(H)ORHG%(H)=HG%(HN)THEN670:REM ES FOLGT KEINE NEUE HARMONIE 662 IFH$(HN)="[208]AUSE"THENTA%=HG%(H):GOTO680:REM PAUSE FOLGT 665 SYSAP+12,HA%(H),HA%(HN),HG%(H),HG%(HN),TR%,TA%:GOTO680:REM UEBERG.TON SUCHEN 670 IFRND(0)FLTHENF=F+F:REM FREQU. 690 TR%=1+2*(FF2THENTR%=-1:REM ...DABEI ECKFREQU. BEACHTEN 700 : 701 REM TON AUSGEBEN 702 : 710 FL=F:FW=F*FU:REM FREQU.IN SID-WERT UMRECHNEN 720 IF(HD>1ORH$(H)=H$(HL))ANDH4>1THEN800 730 IFAZTHENGOSUB1500:AZ=0 740 IFPEEK(FS)THEN740:REM WARTE BIS LETZTER TON V.IRQ-ROUT.BEHANDELT ... 750 IFPR$>""THENPRINT:PRINT:PRINTPR$:PR$="" 760 PRINT:PRINTH$(H)TAB(9)": ";:REM ..ERST DANN HARMONIE-BEZ. AUSGEBEN 800 SYSAP+6,H4,FW,FW*FA,S$(TA%,HS%(H)):REM TON MIT BEZ. ->ASS-PROG 820 IFPEEK(197)=4THENHD=HD%(H):HN=HT+1:W=WA:REM ABBRUCH 830 NEXTHD:GOTO550 850 NEXTW:SYSAP+6,0,0,0,"":SYSAP+3:REM IRQ-ROUT. AUS 890 FORI=0TO1500:NEXT:RETURN 900 : 901 REM ENDE 902 : 990 END 1300 : 1301 REM WERTE ZU EINER HARMONIE GENERIEREN 1302 : 1308 Z=SP(ASC(X$)-193):Z$=MID$(X$,2,1):X=0 1310 IFZ$="#"THENZ=Z+1:GOTO1335 1320 IFZ$="B"THENZ=Z-1-(Z<1)*12:X=1:GOTO1335 1330 IFZ$<>" "THENX$=LEFT$(X$,1)+" "+MID$(X$,2) 1332 IFZ=3ORZ=8THENX=1:REM C- & F-SKALEN MIT B (NICHT #) 1335 H$(HT)=X$:HG%(HT)=Z:HS%(HT)=X:REM BEZ./GRUNDTON/SKALA (# ODER B) 1340 FORI=0TOHT-1:IFH$(I)=X$THENY=HA%(I):GOTO1400 1345 NEXTI:Y=0 1350 Y=FNBS(0)+FNBS(4)+FNBS(7):REM BIT-MUSTER F.GRUND-DREIKLANG 1355 FORI=2TOLEN(X$):Z$=MID$(X$,I,1) 1360 IFZ$="M"THENY=FNBC(4):Y=FNBS(3):GOTO1399:REM MOLL 1365 IFZ$="J"THENY=FNBC(10):Y=FNBS(11):GOTO1399:REM MAJOR 1370 IFZ$="+"THENY=FNBC(7):Y=FNBS(8):GOTO1399:REM QUINTE + 1375 IFZ$="-"THENY=FNBC(7):Y=FNBS(6):GOTO1399:REM QUINTE - 1380 IFZ$="0"ORZ$="O"THENY=FNBC(4):Y=FNBS(3):Y=FNBC(7):Y=FNBS(6):REM VERMINDERT 1382 IFZ$="6"THENY=FNBS(9):GOTO1399:REM SEXTE 1385 IFZ$="7"THEN1398 1386 IFZ$="9"THEN1397 1387 IFZ$="1"THEN1396 1388 IFZ$="3"THEN1395 1390 GOTO1399 1395 Y=FNBS(9):REM 13-ER 1396 Y=FNBS(5):REM 11-ER 1397 Y=FNBS(2):REM 9-ER 1398 IFFNBT(11)=0THENY=FNBS(10):REM 7-ER, WENN NICHT SCHON MAJOR-7 1399 NEXTI 1400 HA%(HT)=Y:PRINT:PRINTX$TAB(9)": "; 1410 FORI=0TO11:IFFNBT(I)=0THEN1450 1420 PRINTS$(I+Z+(I+Z>11)*12,X)" "; 1450 NEXTI:PRINT:RETURN 1500 : 1501 REM ANZAEHLEN 1502 : 1510 SYSAP:REM INIT.IRQ-PROG. 1511 PRINT:PRINT"[211]TIMMTON : "S$(TA%,HS%(H)) 1512 POKERB,1:Z=FW:FORI=1TOA4 1514 SYSAP+6,128,Z,0,"":Z=0:NEXT 1515 IFPEEK(FS)THEN1515 1516 PRINT:PRINT"[193]NZAEHLEN:"; 1520 POKERP,1:FORI=1TOA4 1530 SYSAP+6,128,0,0,STR$(I):NEXT 1540 IFKPTHENPOKERP,0 1550 PR$=" ":RETURN 1800 : 1801 REM FREQU.UMRECHN.KONST. & TEMPO RECHNEN/->ASS.PROG. 1802 : 1820 FU=FK*F6^P(0,0):T0%=0 1840 REM VORSCHLAEGE BEI TEMPI<130 ->1/16-NOTEN, WENN SCHNELLER ->1/8-TRIOLEN 1850 IFP(1,0)<130THENZ=INT(900/P(1,0)+.5):T2%=2*Z:T3%=T2%+Z:T4%=T3%+Z:GOTO1870 1860 Z=INT(1200/P(1,0)+.5):T2%=Z:T3%=T2%+Z:T4%=T3%+Z:GOTO1870 1870 POKER+5,10+T4%/50:REM BASS-DECAY AUFGRUND TEMPO 1880 SYSAP+18,T2%,T3%,T4%:RETURN 1897 : 1898 REM TON -> SID 1899 : 2000 : 2001 REM ABSPEICHERN AUF DISK 2002 : 2010 PRINT"[147][193]BSPEICHERN AUF [196]ISK" 2020 INPUT"[205]USIK-[212]ITEL";MT$ 2030 GOSUB2700:IFERTHENRETURN 2040 OPEN2,8,2,MT$+",S,W":GOSUB2800:IFER=0THEN2050 2042 IFER<>63THENRETURN 2044 PRINT"[213]EBERSCHREIBEN (J/N)? "; 2046 GETZ$:IFZ$<>"J"ANDZ$<>"N"THEN2046 2048 PRINTZ$:IFZ$="N"THEN2090 2049 CLOSE2:PRINT#15,"S0:"+MT$:GOTO2040 2050 PRINT#2,HT;C$;A4;C$;WA:FORI=0TO4:PRINT#2,P(I,0):NEXT 2060 GOSUB2800:IFERTHENRETURN 2070 FORI=1TOHT:PRINT#2,H$(I);C$;HA%(I);C$;HS%(I);C$;HG%(I);C$;HD%(I):NEXTI 2090 GOSUB2800:CLOSE2:CLOSE15:RETURN 2600 : 2700 OPEN15,8,15,"I0" 2800 INPUT#15,ER,ER$,ET,ES:IFER=0THENRETURN 2820 PRINT:PRINTER;ER$;ET;ES:IFER<20ORER=63THENRETURN 2850 : 2900 CLOSE2:CLOSE15 2910 : 2950 PRINT:PRINT"<[212]ASTE DRUECKEN>":POKE198,0 2960 GETZ$:IFZ$=""THEN2960 2980 RETURN 3000 : 3001 REM EINLESEN VON DISK 3002 : 3010 PRINT"[147][212]ITEL EINGEBEN ODER '[210]ETURN' FUER":PRINT"[201]NHALTSVERZEICHNIS" 3020 MT$="":INPUTMT$:IFMT$>""THEN3040 3030 GOSUB3500:IFERORMT$=""THENRETURN 3040 GOSUB2700:OPEN2,8,2,"0:"+MT$+",S,R":GOSUB2800:IFERTHENRETURN 3050 INPUT#2,HT,A4,WA:FORI=0TO4:INPUT#2,P(I,0):IFP(I,0)P(I,2)THENP(I,0)=P(I,2) 3060 NEXTI:GOSUB2800:IFERTHENRETURN 3065 PRINT"[147]"MT$" :"STR$(A4)"/4-[212]AKT":PRINT"[200]ARMONIE [196]AUER IN 1/4" 3070 FORI=1TOHT:INPUT#2,H$(I):Z=ASC(H$(I)+CHR$(0)):IFZ=87ORZ=208THEN3080:REM W+P 3075 IFZ<193ORZ>199THENPRINT:PRINT"*** [198]ILE-[198]EHLER ***":GOTO2900 3080 INPUT#2,HA%(I),HS%(I),HG%(I),HD%(I) 3090 PRINTH$(I)TAB(12)HD%(I):NEXTI:FORI=0TO500:NEXT:GOTO3900 3500 : 3510 GOSUB2700:IFERTHENRETURN 3515 OPEN2,8,2,"#":DT=18:DS=1 3520 PRINT#15,"U1";2;0;DT;DS 3522 PRINT"[147][201]NHALT:":PRINT"[206]R [212]ITEL":PRINT"[163][163] [163][163][163][163][163]" 3525 PRINT#15,"B-P";2;0:GET#2,Z$:DT=ASC(Z$+CHR$(0)):GET#2,Z$:DS=ASC(Z$+CHR$(0)) 3530 FORI=0TO7:PRINT#15,"B-P";2;I*32+2 3540 GET#2,Z$:IFZ$<>CHR$(129)THEN3600 3550 GET#2,Z$,Z$ 3560 X$="":FORJ=1TO16:GET#2,Z$:X$=X$+Z$:NEXT:Z$(I)=X$:PRINTI;X$ 3600 NEXT:PRINT"[212]ASTE DRUECKEN:":PRINT"[206]R.0...7 = DIESEN [212]ITEL EINLESEN" 3610 PRINT"'[211]PACE' = WEITER IM [201]NHALTSVERZEICHNIS" 3620 PRINT"'F1' = ZURUECK INS [205]ENUE" 3640 GETZ$:IFZ$=""THEN3640 3650 IFZ$=CHR$(133)THENMT$="":GOTO3900 3660 IFZ$=>"0"ANDZ$<"8"THENMT$=Z$(VAL(Z$)):GOTO3900 3670 IFZ$<>" "THEN3640 3680 IFDT<1ORDT>35THENPRINT"KEINE WEITEREN [212]ITEL":GOTO3640 3690 GOTO3520 3900 CLOSE2:CLOSE15:RETURN 5000 : 5001 REM PARAMETER AENDERN 5002 : 5020 PRINT"[147][208]ARAMETER-[197]INSTELLUNGEN:" 5030 PRINT"[206]R. WAEHLEN (1-5) UND MIT +/- AENDERN" 5100 PRINT"1) [211]TIMMUNG[146] (A=220 [200]Z)" 5110 PRINT" E F F# G G# A A# B C C# D":PRINTPS$ 5120 PRINT"2) 30 45 60 [212]EMPO[146] 120 150 180":PRINTPS$ 5130 PRINT"3) DUNKEL [194]ASS-[198]ILTER[146] HELL":PRINTPS$ 5140 PRINT"4) 1/4 [194]ASS-[206]OTEN[146] 1/2":PRINTPS$ 5150 PRINT"5) [212]REND [194]ASS-[204]INIE[146] [218]UFALL":PRINTPS$ 5160 PRINT""MN$"" 5165 : 5170 FORPN=0TO4:GOSUB5500:NEXT 5180 GOSUB6900:PN=0:F=220 5190 GOSUB1800:SYSAP:SYSAP+6,0,F*FU,0,"":POKERB,1 5200 Z=PEEK(197):IFZ=4THEN5900 5210 IFZ=56THENPN=0 5220 IFZ=59THENPN=1 5230 IFZ=8 THENPN=2 5240 IFZ=11THENPN=3 5250 IFZ=16THENPN=4 5290 IFZ<>40ANDZ<>43THEN5200 5300 I=(P(PN,2)-P(PN,1))/30:IFZ=43THENI=-I 5310 P(PN,0)=P(PN,0)+I 5320 IFP(PN,0)P(PN,2)THENP(PN,0)=P(PN,2) 5400 : 5410 GOSUB5500:IFPN=0ORPN=1THEN5190 5415 IFPN=2THENPOKER+22,P(2,0) 5420 GOTO5200 5490 : 5500 PRINT"":FORI=0TOPN:PRINT"";:NEXT 5510 Z=INT(30/(P(PN,2)-P(PN,1))*(P(PN,0)-P(PN,1))+3.5) 5520 PRINTLEFT$(L$,Z)"^"LEFT$(L$,35-Z) 5530 RETURN 5900 : 5910 SYSAP+3:RETURN 6900 : 6901 REM INIT.SID-REGISTERS: BASS=VCO#1+2, PERC=VCO#3 6902 : 6910 GOSUB6950:POKER+10,1:POKER+12,8:REM VCO#2 6920 POKER+15,80:REM VCO#3 6930 POKER+22,P(2,0):POKER+23,240+8+2+1:POKER+24,16+15:REM FILTER & VOLUME 6940 RETURN 6950 FORI=R+24TORSTEP-1:POKEI,0:NEXT:RETURN 8000 : 8001 REM NEUEINGABE / EDITIEREN 8002 : 8100 IFHT<1THENPRINT"[147][206]EUEINGABE":GOTO8150 8102 PRINT"[147][206]EUEINGABE ODER [197]DITIEREN (N/E)?"; 8105 GETZ$:IFZ$=""THEN8105 8110 PRINTZ$:IFZ$="N"THEN8150 8120 IFZ$="E"THENHL=HT:GOTO8200 8130 GOTO8100 8150 HL=0:A4=4:WA=1 8200 HT=0:H=0 8210 PRINT"[193]NZAHL 1/4 PRO [212]AKT "A4:PRINTTAB(20)"[145]";:INPUTA4 8220 PRINT"[193]NZAHL [199]ESAMT-[215]IEDERHOLUNGEN "WA:PRINTTAB(29)"[145]";:INPUTWA 8300 PRINT"[147][200]ARMONIEFOLGE EINGEBEN (*=[197]NDE [197]INGABEN)" 8305 PRINT" P=[208]AUSE W=[215]IEDERHOLUNG" 8310 PRINT" [193]...[200] (ODER A...H) =[199]RUND-[196]REIKLANG" 8315 PRINT" #=ERHOEHT B=ERNIEDRIGT" 8320 PRINT" J=MAJOR M=MOLL" 8330 PRINT" +=ERHOEHTE [209]UINT -=ERNIEDRIGTE [209]UINT" 8340 PRINT" O=VERMINDERT [194]=DEUTSCHES [200]" 8350 PRINT" 6,7,9,11,13=[211]EXT,[211]EPT,[206]ONE,USW." 8360 PRINT"[194]EISPIELE:" 8365 PRINT" [195] =[195]-[196]UR-[193]KKORD" 8370 PRINT" [198]#M9 =[198]IS-[205]OLL-[206]ONE-[193]KKORD" 8380 PRINT" [199]B6/7=[199]ES-[211]EXT/[211]EPT-[193]KKORD" 8390 PRINT" [194]B7J =[194]ES-MAJOR-[211]EPT-[193]KKORD" 8400 X$="":HD=4:IFHT71THENPRINT"*** [198]EHLER ***":GOTO8400 8460 X$=CHR$(X+128)+MID$(X$,2) 8470 HT=HT+1:GOSUB1300 8480 PRINT"[196]AUER IN 1/4 "HD:PRINTTAB(13)"[145]";:INPUTHD::H=H+HD 8490 HD%(HT)=HD:GOTO8400 8500 : 8501 REM WIEDERHOLUNGSZEICHEN BEARBEITEN 8510 IFHT=>HLTHENHD=HT:HG%(HT+1)=1 8520 HT=HT+1:H$(HT)="W" 8530 PRINT"AB DER WIEVIELTEN [200]ARMONIE" 8535 PRINT"SOLL WIEDERHOLT WERDEN" 8537 PRINT" "HG%(HT):PRINT"[145]";:INPUTZ:IFZ>HT-2ORZ<1THEN8530 8538 HG%(HT)=Z 8540 PRINT"BIS (UND MIT) ZUR WIEVIELTEN [200]ARMONIE" 8545 PRINT"SOLL WIEDERHOLT WERDEN ( LETZTE="HT-1")" 8550 PRINT" "HD:PRINT"[145]";:INPUTZ:IFZ=>HT ORZ<=HG%(HT)THEN8530 8560 HD%(HT)=Z:GOTO8400 8900 : 8910 IFHT'E'...'D') 9420 DATA105,30,180:REM TEMPO 9430 DATA15,0,30:REM BASS-FILTER 9440 DATA.2,0,1:REM 1/4 - 1/2 NOTEN 9450 DATA.2,0,1:REM TREND - ZUFALL 9480 : 50000 : 50001 REM SAVE PROG. 50002 : 50010 OPEN15,8,15,"S0:BASSIST":GOSUB2800 50020 SAVE"BASSIST",8:GOSUB2800:CLOSE15 50030 END